//
// Created by Sammar on 2024/9/30.
//

#ifndef QCAKETEST_COLORANTIPEN_H
#define QCAKETEST_COLORANTIPEN_H

#include <QImage>
#include <QObject>
#include <QPainter>
#include <QPainterPath>
#include <QPointF>
#include <QRect>
#include <QRectF>
#include <QtMath>
#include <cmath>
#include <list>
#include <vector>
#define ANTICIR_PEN_OK 0
#define ANTICIR_PEN_ERROR -100
const double PI = 3.14159265358979323846;

class ColorAntiPen : public QObject
{
    Q_OBJECT;

  public:
    ColorAntiPen()
    {
    }
    ~ColorAntiPen()
    {
    }

  public:
    /**
     * 初始化画笔的必要参数，若无初始化，则会使用默认值，效果不如预期
     * @param idevpixratio  设备像素比，正确的设备像素比才能抗锯齿
     * @param iradius。     反色圈半径
     * @param qrimagescale  图片窗口缩放比例
     */
    void initAntiColorPen(int idevpixratio, int iradius, qreal qrimagescale);

    /**
     * 绘制反色圈画笔
     * @param sourceimg 原图
     * @param circenterpoint 原点
     * @param rectpos 反色圈图片位置
     * @param outimg  反色圈图片
     * @return
     */
    int drawAntiCirclePen(QImage sourceimg, QPointF circenterpoint, QRectF &rectpos, QPixmap &outimg);

    /**
     * 设置设备像素比
     * @param devpixratio
     */
    void setDevicepixratio(int devpixratio);

    /**
     * 设置设备半径
     * @param radius
     */
    void setRadius(int radius);

    /**
     * 设置图片窗口缩放比例
     * @param scale
     */
    void setImgWinScale(qreal scale);

  private:
    /**
     * 获取圆圈360个角度的位置
     * @param _centerpoint
     * @param _radius
     * @param roundposvec
     */
    void GetRoundPoints(QPointF _centerpoint, float _radius, float _pointadd, std::vector<QPointF> &roundposvec);

    void GetPointTimer(float _radius, int &_pointimer, float &_pointadd);

  private:
    int mdevicpixratio = 2;  // 物理逻辑像素比
    int mradius = 30;        // 反色圈半径
    qreal mimagescale = 1.0; // 窗口图片缩放比例
};
#endif // QCAKETEST_COLORANTIPEN_H
